iT邦幫忙

2024 iThome 鐵人賽

DAY 3
0

我們第三天也來解釋Lstm用於天氣預測的部分,以下是程式碼

import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import LSTM, Dense

# 讀取數據
data = pd.read_csv('weather.csv')
data = data['temperature'].values
data = data.reshape(-1, 1)

# 正規化數據
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data)

# 設定時間步長和創建訓練數據
def create_dataset(dataset, time_step=1):
    X, Y = [], []
    for i in range(len(dataset) - time_step - 1):
        a = dataset[i:(i + time_step), 0]
        X.append(a)
        Y.append(dataset[i + time_step, 0])
    return np.array(X), np.array(Y)

time_step = 100
X, Y = create_dataset(scaled_data, time_step)

# 重塑數據以適應 LSTM
X = X.reshape(X.shape[0], X.shape[1], 1)

# 建立 LSTM 模型
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(time_step, 1)))
model.add(LSTM(50, return_sequences=False))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mean_squared_error')

# 訓練模型
model.fit(X, Y, epochs=20, batch_size=32, verbose=1)

# 預測未來數據
test_data = scaled_data[-time_step:]
test_data = test_data.reshape(1, time_step, 1)
prediction = model.predict(test_data)
prediction = scaler.inverse_transform(prediction)

print("預測的溫度值: ", prediction)
  1. 讀取數據

    data = pd.read_csv('weather.csv')
    data = data['temperature'].values
    data = data.reshape(-1, 1)
    

    這段程式碼從 CSV 文件中讀取溫度數據,並將其轉換成 NumPy 陣列,方便後續處理。

  2. 正規化數據

    scaler = MinMaxScaler(feature_range=(0, 1))
    scaled_data = scaler.fit_transform(data)
    

    為了使模型訓練更穩定,我們使用 MinMaxScaler 將數據正規化到 0 和 1 之間。

創建訓練數據集

  1. 創建數據集
    def create_dataset(dataset, time_step=1):
        X, Y = [], []
        for i in range(len(dataset) - time_step - 1):
            a = dataset[i:(i + time_step), 0]
            X.append(a)
            Y.append(dataset[i + time_step, 0])
        return np.array(X), np.array(Y)
    
    time_step = 100
    X, Y = create_dataset(scaled_data, time_step)
    
    我們創建一個函數 create_dataset 來生成訓練數據集。該函數根據給定的 time_step(在此例中為 100)將數據拆分成輸入 X 和目標輸出 Y。

數據重塑

  1. 重塑數據
    X = X.reshape(X.shape[0], X.shape[1], 1)
    
    為了適應 LSTM 模型,我們需要將數據重塑為三維陣列,形狀為 (樣本數, 時間步長, 特徵數)

建立和訓練 LSTM 模型

  1. 建立模型

    model = Sequential()
    model.add(LSTM(50, return_sequences=True, input_shape=(time_step, 1)))
    model.add(LSTM(50, return_sequences=False))
    model.add(Dense(1))
    model.compile(optimizer='adam', loss='mean_squared_error')
    

    我們使用 Keras 庫來建立一個 LSTM 模型。模型包括兩層 LSTM,每層有 50 個單元。第一層的 return_sequences=True 表示返回完整的序列,第二層則只返回最後一個輸出。最後一層是 Dense 層,用於生成最終預測值。模型使用均方誤差(MSE)作為損失函數,Adam 作為優化器。

  2. 訓練模型

    model.fit(X, Y, epochs=20, batch_size=32, verbose=1)
    

    使用訓練數據 XY 訓練模型,訓練 20 個 epochs,每個批次大小為 32。

進行預測

  1. 預測未來數據
    test_data = scaled_data[-time_step:]
    test_data = test_data.reshape(1, time_step, 1)
    prediction = model.predict(test_data)
    prediction = scaler.inverse_transform(prediction)
    print("預測的溫度值: ", prediction)
    
    我們使用最後 100 天(time_step) 的數據作為測試數據,重塑為適合 LSTM 模型的三維陣列。模型預測的結果是正規化數據,需要反轉正規化以獲得實際溫度值。

這段程式碼展示了如何使用 LSTM 模型進行天氣預測。首先,我們對數據進行預處理和正規化,然後創建適合 LSTM 模型的訓練數據集。接下來,我們建立並訓練 LSTM 模型,最後使用模型對未來的溫度進行預測。這種方法可以應用於其他時間序列預測問題,只需調整輸入數據和模型參數即可。


上一篇
day 2 lstm股票預測
下一篇
day 4 lstm對於斑馬魚的行為分析
系列文
LSTM結合Yolo v8對於多隻斑馬魚行為分析29
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言